home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1997 February: Technology Seed / Mac Tech Seed Feb '97.toast / ODF Release 3 / ODFDev / ODF / OS / FWMenu / FWMnuItm.h < prev    next >
Encoding:
Text File  |  1996-12-16  |  10.5 KB  |  355 lines  |  [TEXT/MPS ]

  1. //========================================================================================
  2. //
  3. //    File:                FWMnuItm.h
  4. //    Release Version:    $ ODF 3 $
  5. //
  6. //    Copyright:    (c) 1993 - 1996 by Apple Computer, Inc., all rights reserved.
  7. //
  8. //========================================================================================
  9.  
  10. #ifndef FWMNUITM_H
  11. #define FWMNUITM_H
  12.  
  13. #ifndef FWMENUS_K
  14. #include "FWMenus.k"
  15. #endif
  16.  
  17. #ifndef FWODTYPS_H
  18. #include "FWODTyps.h"
  19. #endif
  20.  
  21. // ----- Foundation Includes -----
  22.  
  23. #ifndef FWSTRS_H
  24. #include "FWStrs.h"
  25. #endif
  26.  
  27. #ifndef FWSTREAM_H
  28. #include "FWStream.h"
  29. #endif
  30.  
  31. #ifndef FWTCOLL_H
  32. #include "FWTColl.h"
  33. #endif
  34.  
  35. // ----- OpenDoc Includes -----
  36.  
  37. #ifndef SOM_Module_OpenDoc_Commands_defined
  38. #include <CmdDefs.xh>
  39. #endif
  40.  
  41. //========================================================================================
  42. //    Forward Declarations
  43. //========================================================================================
  44.  
  45. class FW_CPullDownMenu;
  46. class FW_CString;
  47. class FW_CMenuBar;
  48.  
  49. //========================================================================================
  50. //    Defines
  51. //========================================================================================
  52.  
  53. typedef short FW_MenuKey;
  54.  
  55. #ifdef FW_BUILD_MAC
  56. const FW_MenuKey FW_kPrivMacMenuKeyCharMask         = 0x00FF;
  57. const short FW_kPrivMacScriptCodeKeyEquivalent         = 28;    // key equiv value of $1C indicates that the icon field contains a script code
  58. #endif
  59.  
  60. const ODMenuID FW_kFirstMenuID = 4;
  61. const ODMenuID FW_kLastMenuID = 254;        // 255 is used for the unattached menu ID
  62.  
  63. //========================================================================================
  64. //    class FW_CMenuItem
  65. //========================================================================================
  66.  
  67. class FW_CMenuItem
  68. {
  69. public:
  70.     FW_DECLARE_CLASS
  71.     FW_DECLARE_AUTO(FW_CMenuItem)
  72.  
  73. //----------------------------------------------------------------------------------------
  74. //    Constructors/Destructors
  75. //
  76. public:
  77.     FW_CMenuItem(Environment* ev, 
  78.                 FW_CReadableStream& stream);
  79.     FW_CMenuItem(Environment* ev, 
  80.                 FW_CPullDownMenu* ownerMenu, 
  81.                 short index);
  82.     
  83.     virtual     ~FW_CMenuItem();
  84.  
  85. //----------------------------------------------------------------------------------------
  86. //    New API
  87. //
  88. public:
  89.     //----- Getters/setters -----
  90.     ODCommandID            GetCommandID(Environment* ev) const;
  91.     
  92.     FW_CPullDownMenu*    GetOwnerMenu(Environment* ev) const;
  93.     short                GetIndex(Environment* ev) const;
  94.  
  95.     //----- Archiving -----
  96.     virtual void        Flatten(Environment* ev, FW_CWritableStream& stream);    
  97.     static void*        Read(FW_CReadableStream& stream, FW_ClassTypeConstant type);
  98.     static void         Write(FW_CWritableStream& stream, FW_ClassTypeConstant type, const void *object);
  99.     
  100. //----------------------------------------------------------------------------------------
  101. //    Implementation only
  102. //
  103. public:
  104.     virtual void            PrivAttach(Environment* ev, FW_CMenuBar* menuBar);
  105.     virtual void            PrivDetach(Environment* ev, FW_CMenuBar* menuBar);
  106.     virtual void            PrivDisableAll(Environment* ev);
  107.     virtual void            PrivEnableAll(Environment* ev);
  108.     virtual FW_CMenuItem*     PrivGetMenuItem(Environment* ev, ODCommandID commandID) const;
  109.     
  110.     virtual FW_CPullDownMenu* PrivFindMenuWithID(Environment* ev, ODMenuID menuID) const;
  111.     
  112.     void                    PrivSetIndex(Environment* ev, short newIndex);
  113.     
  114. //----------------------------------------------------------------------------------------
  115. //    Data Members
  116. //
  117. protected:
  118. #ifdef FW_BUILD_MAC
  119.     ODCommandID            fCommandID;        // On windows call the toolbox
  120. #endif
  121.     FW_CPullDownMenu*    fOwnerMenu;
  122.     short                fIndex;            // one-based
  123. };
  124.  
  125.  
  126. //========================================================================================
  127. //    class FW_CSeparatorItem
  128. //========================================================================================
  129.  
  130. class FW_CSeparatorItem : public FW_CMenuItem
  131. {
  132. public:
  133.     FW_DECLARE_CLASS
  134.     FW_DECLARE_AUTO(FW_CSeparatorItem)
  135.  
  136. //----------------------------------------------------------------------------------------
  137. //    Constructors/Destructors
  138. //
  139. public:
  140.     FW_CSeparatorItem(Environment* ev, 
  141.                 FW_CReadableStream& stream);
  142.     FW_CSeparatorItem(Environment* ev, 
  143.                 FW_CPullDownMenu* ownerMenu, 
  144.                 short index);
  145.                 
  146.     virtual     ~FW_CSeparatorItem();
  147.  
  148. protected:
  149.     void        InitSeparator(Environment* ev, const ODPlatformMenu& platformMenu);
  150.     
  151. //----------------------------------------------------------------------------------------
  152. //    Inherited API
  153. //
  154. public:
  155.     static void*        Read(FW_CReadableStream& stream, FW_ClassTypeConstant type);
  156.  
  157. //----------------------------------------------------------------------------------------
  158. //    Implementation only
  159. //
  160. public:
  161.     virtual void        PrivDisableAll(Environment* ev);
  162.     virtual void        PrivEnableAll(Environment* ev);
  163. };
  164.  
  165.  
  166.  
  167. //========================================================================================
  168. //    class FW_CTextItem
  169. //========================================================================================
  170.  
  171. class FW_CTextItem : public FW_CMenuItem
  172. {
  173. public:
  174.     FW_DECLARE_CLASS
  175.     FW_DECLARE_AUTO(FW_CTextItem)
  176.  
  177. //----------------------------------------------------------------------------------------
  178. //    Constructors/Destructors
  179. //
  180. public:
  181.     FW_CTextItem(Environment* ev, 
  182.                 FW_CReadableStream& stream);
  183.     FW_CTextItem(Environment* ev,
  184.                 FW_CPullDownMenu* ownerMenu, 
  185.                 short index,            
  186.                 const FW_CString& text,
  187.                 ODCommandID commandID,
  188.                 FW_MenuKey menuKey = FW_kNoKeyEquivalent);
  189.     virtual ~FW_CTextItem();
  190.  
  191. //----------------------------------------------------------------------------------------
  192. //    Inherited API
  193. //
  194. public:
  195.     //----- Archiving -----
  196.     virtual void        Flatten(Environment* ev, FW_CWritableStream& stream);
  197.     static void*        Read(FW_CReadableStream& stream, FW_ClassTypeConstant type);
  198.     
  199. //----------------------------------------------------------------------------------------
  200. //    Implementation only
  201. //
  202. public:
  203. #ifdef FW_BUILD_MAC
  204.     virtual void        PrivAttach(Environment* ev, FW_CMenuBar* menuBar);
  205.     virtual void        PrivDetach(Environment* ev, FW_CMenuBar* menuBar);
  206. #endif
  207. private:
  208.     void                PrivInitTextItem(Environment* ev,
  209.                                          const ODPlatformMenu&    platformMenu,
  210.                                           const FW_CString& text,
  211.                                          ODCommandID commandID,
  212.                                           FW_MenuKey menuKey);
  213.                               
  214. };
  215.  
  216.  
  217.  
  218. //========================================================================================
  219. //    class FW_CToggleItem
  220. //========================================================================================
  221.  
  222. class FW_CToggleItem : public FW_CTextItem
  223. {
  224. public:
  225.     FW_DECLARE_CLASS
  226.     FW_DECLARE_AUTO(FW_CToggleItem)
  227.  
  228. //----------------------------------------------------------------------------------------
  229. //    Constructors/Destructors
  230. //
  231. public:
  232.     FW_CToggleItem(Environment* ev, 
  233.                 FW_CReadableStream& stream);
  234.     FW_CToggleItem(Environment* ev,
  235.                 FW_CPullDownMenu* ownerMenu, 
  236.                 short index,            
  237.                 const FW_CString& trueText,
  238.                 const FW_CString& falseText,
  239.                 ODCommandID commandID,
  240.                 FW_MenuKey menuKey = FW_kNoKeyEquivalent);
  241.     virtual     ~FW_CToggleItem();
  242.  
  243. //----------------------------------------------------------------------------------------
  244. //    New API
  245. //
  246. public:
  247.     void                ToggleItem(Environment* ev, FW_Boolean newState);
  248.     
  249.     //----- Archiving -----
  250.     virtual void        Flatten(Environment* ev, FW_CWritableStream& stream);
  251.     static void*        Read(FW_CReadableStream& stream, FW_ClassTypeConstant type);
  252.  
  253. //----------------------------------------------------------------------------------------
  254. //    Data Members
  255. //
  256. private:
  257.     FW_Boolean            fToggleState;
  258.     FW_CString            fOtherText;
  259. };
  260.  
  261.  
  262.  
  263. //========================================================================================
  264. //    class FW_CSubMenuItem
  265. //========================================================================================
  266.  
  267. class FW_CSubMenuItem : public FW_CMenuItem
  268. {
  269. public:
  270.     FW_DECLARE_CLASS
  271.     FW_DECLARE_AUTO(FW_CSubMenuItem)
  272.  
  273. //----------------------------------------------------------------------------------------
  274. //    Constructors/Destructors
  275. //
  276. public:
  277.     FW_CSubMenuItem(Environment* ev, 
  278.                 FW_CReadableStream& stream);
  279.     FW_CSubMenuItem(Environment* ev,
  280.                 FW_CPullDownMenu* ownerMenu, 
  281.                 short index,
  282.                 FW_CPullDownMenu* adoptSubMenu);
  283.     virtual     ~FW_CSubMenuItem();
  284.  
  285. //----------------------------------------------------------------------------------------
  286. //    New API
  287. //
  288. public:
  289.     //----- Getters/setters -----
  290.     FW_CPullDownMenu*    GetSubMenu(Environment* ev) const;
  291.  
  292.     //----- Archiving -----
  293.     virtual void        Flatten(Environment* ev, FW_CWritableStream& stream);
  294.     static void*        Read(FW_CReadableStream& stream, FW_ClassTypeConstant type);
  295.  
  296. //----------------------------------------------------------------------------------------
  297. //    Implementation only
  298. //
  299. public:
  300.     virtual void            PrivAttach(Environment* ev, FW_CMenuBar* menuBar);
  301.     virtual void            PrivDetach(Environment* ev, FW_CMenuBar* menuBar);
  302.     virtual void            PrivDisableAll(Environment* ev);
  303.     virtual void            PrivEnableAll(Environment* ev);
  304.     virtual FW_CMenuItem*     PrivGetMenuItem(Environment* ev, ODCommandID commandID) const;
  305.  
  306.     virtual FW_CPullDownMenu* PrivFindMenuWithID(Environment* ev, ODMenuID menuID) const;
  307.  
  308. private:
  309.     void                    PrivInitSubMenu(Environment* ev, const ODPlatformMenu&    platformMenu);
  310.     
  311. //----------------------------------------------------------------------------------------
  312. //    Data Members
  313. //
  314. private:
  315.     FW_CPullDownMenu*    fSubMenu;
  316. };
  317.  
  318. //========================================================================================
  319. //    FW_CMenuItem inlines
  320. //========================================================================================
  321.  
  322. //----------------------------------------------------------------------------------------
  323. //    FW_CMenuItem::GetOwnerMenu
  324. //----------------------------------------------------------------------------------------
  325. inline FW_CPullDownMenu* FW_CMenuItem::GetOwnerMenu(Environment*) const
  326. {
  327.     return fOwnerMenu;
  328. }
  329.  
  330. //----------------------------------------------------------------------------------------
  331. //    FW_CMenuItem::GetIndex
  332. //----------------------------------------------------------------------------------------
  333. inline short FW_CMenuItem::GetIndex(Environment*) const
  334. {
  335.     return fIndex;
  336. }
  337.  
  338. //----------------------------------------------------------------------------------------
  339. //    FW_CSubMenuItem::GetSubMenu
  340. //----------------------------------------------------------------------------------------
  341. inline FW_CPullDownMenu* FW_CSubMenuItem::GetSubMenu(Environment*) const
  342. {
  343.     return fSubMenu;
  344. }
  345.  
  346. //----------------------------------------------------------------------------------------
  347. //    FW_CMenuItem::PrivSetIndex
  348. //----------------------------------------------------------------------------------------
  349. inline void FW_CMenuItem::PrivSetIndex(Environment*, short newIndex)
  350. {
  351.     fIndex = newIndex;
  352. }
  353.  
  354. #endif
  355.